package com.gl.glcourses.model
{
	import com.gl.glcourses.events.GLCoursesEvent;
	import com.gl.glcourses.model.constants.Constants;
	import com.gl.glcourses.vos.Confirmacion;
	import com.gl.glcourses.vos.Oficina;
	import com.gl.glcourses.vos.Usuario;
	import com.gl.glcourses.vos.Votacion;
	
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.resources.ResourceBundle;
	import mx.resources.ResourceManager;
	import mx.utils.StringUtil;
	
	public class CrearVotacionPanelModel extends PresentationModel
	{
		
		//INJECTORS
		[Bindable]
		public var oficinas:ArrayCollection = new ArrayCollection();
		
		private var _cursos:ArrayCollection = new ArrayCollection();
		
		public function set cursos(cursos:ArrayCollection):void
		{
			cursosNoSeleccionados.removeAll();
			cursosNoSeleccionados.addAll( cursos);
			_cursos.addAll(cursos);
		}
		
		[Bindable]
		public var usuariosLista:ArrayCollection = new ArrayCollection();
		
		public var _usuariosPM:ArrayCollection;
		
		[Bindable]
		public function get usuariosPM():ArrayCollection
		{
			return _usuariosPM;
		}

		public function set usuariosPM(usuariosPM:ArrayCollection):void{
			usuariosLista.removeAll();
			
			for each(var user:Usuario in usuariosPM)
			{
				if(user.oficina)
				{					
					usuariosLista.addItem(user);
				}
			}
			usuariosLista.filterFunction = usuarioPMFilterFunction;
			usuariosLista.refresh();
		}
		
		
		//VARIABLES MODELO
		[Bindable]
		public var votacion:Votacion = new Votacion();	
		
		[Bindable]
		public var oficinasSeleccionadas:ArrayCollection = new ArrayCollection();	
		
		[Bindable]
		public var fechaSeleccionada:Date = fechaHoy(); 
		
		[Bindable]
		public var fechaDevolucion:Date = calcularFechaDevolucion(fechaHoy());
		
		[Bindable]
		public var cursosNoSeleccionados:ArrayCollection = new ArrayCollection();
		
		[Bindable]
		public var cursosSeleccionados:ArrayCollection = new ArrayCollection();
		
		
		
		
		public function limpiarSegunConfirmacion( confirmacion:Confirmacion ):void {
			if( confirmacion.estado == Constants.CONFIRMACION_OK ){
				limpiar();
			}
		}
		
		public function crearVotacion(event2:Event):Boolean
		{
			if( validar() )
			{
				var event:GLCoursesEvent = new GLCoursesEvent( GLCoursesEvent.CREAR_VOTACION );
				event.votacion = new Votacion();
				
				if(votacion.fechaCierre == null){
					event.votacion.fechaCierre = calcularFechaDevolucion(fechaHoy());
				}else{
					event.votacion.fechaCierre = votacion.fechaCierre;
				}
				if(votacion.fechaInicio == null){
					event.votacion.fechaInicio = fechaHoy();
				}else{
					event.votacion.fechaInicio = votacion.fechaInicio;
				}
				
				event.votacion.usuarios = usuariosSeleccionados();
				event.votacion.nombreVotacion = votacion.nombreVotacion;
				event.cursosSeleccionados.addAll(cursosSeleccionados);
				dispatch( event );
				limpiar();
				return true
			}
			return false
		}
		
		public function fechaHoy():Date
		{
			var fecha:Date = new Date();
			trace(fecha);
			return fecha;
		}
		
		public function calcularFechaDevolucion(date:Date):Date
		{
			var fecha:Date = new Date();
			fecha.setDate(date.getDate()+15);
			return fecha;
		}
		
		public function validar():Boolean
		{
			votacion.nombreVotacion = StringUtil.trim(votacion.nombreVotacion);			
			if(cursosSeleccionados.length==0){
				Alert.show(Constants.getString( "alert.courseSelect" ));
				return false;
			}
			if(votacion.nombreVotacion==""){
				Alert.show(Constants.getString("alert.VotingName"));
				return false;
			}
			if(votacion.nombreVotacion.length >= 100){
				Alert.show(Constants.getString("alert.votingCharacters"));
				return false;
			}
			if(usuariosSeleccionados().length==0){
				Alert.show(Constants.getString("alert.userSelect"));
				return false;			
			}
			return true;
		}
		
		public function limpiar():void
		{
			cursosSeleccionados.removeAll();
			cursosNoSeleccionados.removeAll();
			cursosNoSeleccionados.addAll(_cursos);
			votacion.nombreVotacion = "";
			fechaSeleccionada = fechaHoy();
			fechaDevolucion = calcularFechaDevolucion(fechaHoy());
			traerOficinas();
			oficinas.refresh();			
			oficinasSeleccionadas.removeAll();
			usuariosLista.refresh();
		}
		
		
		
		public function usuarioPMFilterFunction(obj:Object):Boolean{
			var usuario:Usuario;
			if( obj is Usuario )
			{
				var user:Usuario = obj as Usuario;
				for each( var oficinaSeleccionada:Oficina in oficinasSeleccionadas )
				{ 
					if( user.oficina.id == oficinaSeleccionada.id )
					{	
						return true;
					}
				}
				user.selected = false;
				return false;	
			}	
			return false;	
		}
		
		private function usuariosSeleccionados():ArrayCollection{
			var usuariosLista:ArrayCollection = new ArrayCollection();
			for each (var usuario:Usuario in this.usuariosLista){
				if(usuario.selected){
					usuariosLista.addItem(usuario);
				}
			}
			return usuariosLista
		}
		
		public function seleccionarTodos(band:Boolean):void{
			for each (var usuario:Usuario in this.usuariosLista){
				usuario.selected= band
			}
			usuariosLista.refresh()
		}
		
		public function traerOficinas():void
		{
			var event:GLCoursesEvent = new GLCoursesEvent( GLCoursesEvent.BUSCAR_OFICINAS );
			dispatch( event );
		}
		
	}
	
}
